//2024_05_08_库函数的模拟实现_作业

//模拟实现strlen
//strlen：求字符串长度
//原型：size_t strlen ( const char * str );

//#include <stdio.h>
//#include <assert.h>
//size_t my_strlen(const char* str)
//{
//	1.计数法
//	assert(str != NULL);
//	size_t count = 0;
//	while (*str)
//	{
//		count++;
//		str++;
//	}
//	return count;
	
//	2.指针 - 指针
//	assert(str != NULL);
//	const char* start = str;
//	while (*str)
//	{
//		str++;
//	}
//	return str - start;
	
//	3.递归实现strlen函数
//	assert(str != NULL);
//	if(*str != '\0')
//	{
//		return 1 + my_strlen(str + 1);
//	}
//	else
//	{
//		return 0;
//	}
//}
//
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = { 'a','b','c','d','e','f','\0' };
//	size_t len = my_strlen(arr1);
//	printf("%zd\n", len);
//	len = my_strlen(arr2);
//	printf("%zd\n", len);
//	
//	return 0;
//}

//模拟实现strcpy
//字符串拷贝
//原型：char * strcpy ( char * destination, const char * source );

//#include <stdio.h>
//#include <assert.h>
//char* my_strcpy(char* str2, const char* str1)
//{
//	1.第一种写法
//	assert(str2 && str1);
//	char* start = str2;
//	while (*str1 != '\0')
//	{
//		*str2 = *str1;
//		str2++;
//		str1++;
//	}
//	*str2 = *str1;
//	return start;
//	2.第二种写法
//	assert(str2 && str1);
//	char* start = str2;
//	//这种写法，在条件中执行了表达式，将表达式的结果作为循环条件。
//	//表达式中先进行赋值操作，在进行指针偏移操作
//	while((*str2++ = *str1++))
//		;
//	return start;
//	
//}
//
//int main()
//{
//	char arr1[] = "I am a student";
//	char arr2[256] = {0};
//	char* start = my_strcpy(arr2, arr1);
//	printf("%s\n", start);
//	printf("%s\n", arr2);
//	printf("%s\n", my_strcpy(arr2, arr1));
//	
//	return 0;
//}

//模拟实现strcmp
//字符串比较
//原型：int strcmp ( const char * str1, const char * str2 );

//#include <stdio.h>
//#include <assert.h>
//int my_strcmp(const char* str1, const char* str2)
//{
//	1.第一种写法：返回值固定
//	assert(str1 && str2);
//	while(*str1 == *str2)
//	{
//		if(*str1 == '\0')
//			return 0;
//		str1++;
//		str2++;
//	}
//	if(*str1 > *str2)
//		return 1;
//	else
//		return -1;
//	2.第二种写法：按照c语言库函数标准
//	assert(str1 && str2);
//	while(*str1 == *str2)
//	{
//		if(*str1 == '\0')
//			return 0;
//		str1++;
//		str2++;
//	}
//	return (*str1 - *str2);
//}
//
//int main()
//{
//	char arr1[] = "abcdefg";
//	char arr2[] = "abcq";
//	
//	int ret = my_strcmp(arr1, arr2);
//	printf("%d", ret);
//	return 0;
//}

//模拟实现strcat
//字符串追加
//原型：char * strcat ( char * destination, const char * source );

//#include <stdio.h>
//#include <assert.h>
//
//char* my_strcat(char* str1, const char* str2)
//{
//	assert(str1 && str2);
//	char* start = str1;
//	while(*str1 != '\0')
//		str1++;
//	while((*str1++ = *str2++))
//		;
//	return start;
//}
//
//int main()
//{
//	char arr1[20] = "Hello ";
//	char arr2[] = "World";
//	char* start = my_strcat(arr1, arr2);
//	printf("%s\n", start);
//	printf("%s\n", arr1);
//	
//	return 0;
//}
